{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-binarymanager-common",
      "artifactVersion": "2023.19.6",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage.binarymanager.common",
          "org.nuxeo.ecm.core.storage.binarymanager.s3"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager",
        "id": "grp:org.nuxeo.ecm.core.storage.binarymanager",
        "name": "org.nuxeo.ecm.core.storage.binarymanager",
        "parentIds": [
          "grp:org.nuxeo.ecm.core.storage",
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.19"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.binarymanager.common",
      "components": [],
      "fileName": "nuxeo-core-binarymanager-common-2023.19.6.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.common",
      "id": "org.nuxeo.ecm.core.storage.binarymanager.common",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.9.6\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.12\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 2023.19.6-t20240918-065750\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.binarymanager.common;sin\r\n gleton:=true\r\n\r\n",
      "packages": [
        "amazon-s3-online-storage"
      ],
      "requirements": [],
      "version": "2023.19.6"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-core-binarymanager-s3",
      "artifactVersion": "2023.19.6",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.core.storage.binarymanager.common",
          "org.nuxeo.ecm.core.storage.binarymanager.s3"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager",
        "id": "grp:org.nuxeo.ecm.core.storage.binarymanager",
        "name": "org.nuxeo.ecm.core.storage.binarymanager",
        "parentIds": [
          "grp:org.nuxeo.ecm.core.storage",
          "grp:org.nuxeo.ecm.core"
        ],
        "readmes": [],
        "version": "2023.19"
      },
      "bundleId": "org.nuxeo.ecm.core.storage.binarymanager.s3",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--probes",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.managment.contrib/Contributions/org.nuxeo.ecm.core.storage.cloud.managment.contrib--probes",
              "id": "org.nuxeo.ecm.core.storage.cloud.managment.contrib--probes",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.19.6",
              "xml": "<extension point=\"probes\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe class=\"org.nuxeo.ecm.core.storage.status.S3BinaryManagerStatusProbe\" name=\"s3BinaryManagerStatus\">\n      <label>S3BinaryManager probe</label>\n    </probe>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.management.CoreManagementComponent--healthCheck",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.managment.contrib/Contributions/org.nuxeo.ecm.core.storage.cloud.managment.contrib--healthCheck",
              "id": "org.nuxeo.ecm.core.storage.cloud.managment.contrib--healthCheck",
              "registrationOrder": 0,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.management.CoreManagementComponent",
                "name": "org.nuxeo.ecm.core.management.CoreManagementComponent",
                "type": "service"
              },
              "version": "2023.19.6",
              "xml": "<extension point=\"healthCheck\" target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\">\n    <probe enabled=\"true\" name=\"s3BinaryManagerStatus\"/>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.managment.contrib",
          "name": "org.nuxeo.ecm.core.storage.cloud.managment.contrib",
          "requirements": [],
          "resolutionOrder": 127,
          "services": [],
          "startOrder": 162,
          "version": "2023.19.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.cloud.managment.contrib\">\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" point=\"probes\">\n    <probe name=\"s3BinaryManagerStatus\" class=\"org.nuxeo.ecm.core.storage.status.S3BinaryManagerStatusProbe\">\n      <label>S3BinaryManager probe</label>\n    </probe>\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.management.CoreManagementComponent\" point=\"healthCheck\">\n    <probe name=\"s3BinaryManagerStatus\" enabled=\"true\" />\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/s3binarymanager-managment-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.config",
          "name": "org.nuxeo.ecm.core.storage.s3.config",
          "requirements": [],
          "resolutionOrder": 128,
          "services": [],
          "startOrder": 169,
          "version": "2023.19.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.s3.config\" version=\"1.0\">\n\n  <!--\n    The nuxeo.s3.multipart.copy.part.size ConfigurationService property is deprecated since 2021.11,\n    use the nuxeo.s3storage.multipart.copy.part.size nuxeo.conf property instead.\n  -->\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/configuration-properties.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService--filterConfig",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib/Contributions/org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib--filterConfig",
              "id": "org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib--filterConfig",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "name": "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService",
                "type": "service"
              },
              "version": "2023.19.6",
              "xml": "<extension point=\"filterConfig\" target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\">\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"cachednxfile\" private=\"true\" synchonize=\"false\" transactional=\"false\">\n      <pattern>/nuxeo/nxfile/.*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n    <filterConfig cacheTime=\"3600\" cached=\"true\" name=\"cachedBPR\" private=\"true\" transactional=\"true\">\n      <pattern>/nuxeo/.*/@(blob|preview|rendition).*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib",
          "name": "org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib",
          "requirements": [
            "org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib"
          ],
          "resolutionOrder": 613,
          "services": [],
          "startOrder": 163,
          "version": "2023.19.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.cloud.requestcontroller.service.contrib\">\n\n  <require>org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService.defaultContrib</require>\n\n  <extension target=\"org.nuxeo.ecm.platform.web.common.requestcontroller.service.RequestControllerService\"\n    point=\"filterConfig\">\n\n    <filterConfig name=\"cachednxfile\" transactional=\"false\" synchonize=\"false\" cached=\"true\" private=\"true\" cacheTime=\"${nuxeo.s3storage.directdownload.expire:=3600}\">\n      <pattern>${org.nuxeo.ecm.contextPath}/nxfile/.*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n    <filterConfig name=\"cachedBPR\" cached=\"true\" private=\"true\" cacheTime=\"${nuxeo.s3storage.directdownload.expire:=3600}\" transactional=\"true\">\n      <pattern>${org.nuxeo.ecm.contextPath}/.*/@(blob|preview|rendition).*\\\\?.*changeToken=.+</pattern>\n    </filterConfig>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/s3web-request-controller-contrib.xml",
          "xmlPureComponent": true
        },
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.scroll.service--scroll",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config/Contributions/org.nuxeo.ecm.core.storage.s3.bulk.config--scroll",
              "id": "org.nuxeo.ecm.core.storage.s3.bulk.config--scroll",
              "registrationOrder": 4,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.scroll.service",
                "name": "org.nuxeo.ecm.core.scroll.service",
                "type": "service"
              },
              "version": "2023.19.6",
              "xml": "<extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll class=\"org.nuxeo.ecm.blob.s3.S3BlobScroll\" name=\"s3BlobScroll\" type=\"generic\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.bulk--actions",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config/Contributions/org.nuxeo.ecm.core.storage.s3.bulk.config--actions",
              "id": "org.nuxeo.ecm.core.storage.s3.bulk.config--actions",
              "registrationOrder": 16,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.bulk",
                "name": "org.nuxeo.ecm.core.bulk",
                "type": "service"
              },
              "version": "2023.19.6",
              "xml": "<extension point=\"actions\" target=\"org.nuxeo.ecm.core.bulk\">\n    <action batchSize=\"25\" bucketSize=\"100\" enabled=\"false\" httpEnabled=\"true\" inputStream=\"bulk/s3SetBlobLength\" name=\"s3SetBlobLength\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.stream.service--streamProcessor",
              "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config/Contributions/org.nuxeo.ecm.core.storage.s3.bulk.config--streamProcessor",
              "id": "org.nuxeo.ecm.core.storage.s3.bulk.config--streamProcessor",
              "registrationOrder": 20,
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.stream.service",
                "name": "org.nuxeo.runtime.stream.service",
                "type": "service"
              },
              "version": "2023.19.6",
              "xml": "<extension point=\"streamProcessor\" target=\"org.nuxeo.runtime.stream.service\">\n    <streamProcessor class=\"org.nuxeo.ecm.core.bulk.S3SetBlobLengthAction\" defaultConcurrency=\"2\" defaultPartitions=\"4\" enabled=\"false\" name=\"s3SetBlobLength\">\n      <policy continueOnFailure=\"true\" delay=\"500ms\" maxDelay=\"10s\" maxRetries=\"3\" name=\"default\"/>\n    </streamProcessor>\n\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3/org.nuxeo.ecm.core.storage.s3.bulk.config",
          "name": "org.nuxeo.ecm.core.storage.s3.bulk.config",
          "requirements": [
            "org.nuxeo.runtime.stream.service",
            "org.nuxeo.ecm.core.scroll.service"
          ],
          "resolutionOrder": 830,
          "services": [],
          "startOrder": 168,
          "version": "2023.19.6",
          "xmlFileContent": "<?xml version=\"1.0\"?>\n<component name=\"org.nuxeo.ecm.core.storage.s3.bulk.config\" version=\"1.0.0\">\n\n  <require>org.nuxeo.runtime.stream.service</require>\n  <require>org.nuxeo.ecm.core.scroll.service</require>\n\n  <extension point=\"scroll\" target=\"org.nuxeo.ecm.core.scroll.service\">\n    <scroll type=\"generic\" name=\"s3BlobScroll\" class=\"org.nuxeo.ecm.blob.s3.S3BlobScroll\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.ecm.core.bulk\" point=\"actions\">\n    <action name=\"s3SetBlobLength\" inputStream=\"bulk/s3SetBlobLength\" bucketSize=\"100\" batchSize=\"25\" httpEnabled=\"true\"\n      enabled=\"${binarymanager.bulk.s3SetBlobLength.enabled:=false}\" />\n  </extension>\n\n  <extension target=\"org.nuxeo.runtime.stream.service\" point=\"streamProcessor\">\n    <streamProcessor name=\"s3SetBlobLength\" class=\"org.nuxeo.ecm.core.bulk.S3SetBlobLengthAction\"\n      defaultConcurrency=\"${binarymanager.bulk.s3SetBlobLength.concurrency:=2}\"\n      defaultPartitions=\"${binarymanager.bulk.s3SetBlobLength.partitions:=4}\"\n      enabled=\"${binarymanager.bulk.s3SetBlobLength.enabled:=false}\">\n      <policy name=\"default\" maxRetries=\"3\" delay=\"500ms\" maxDelay=\"10s\" continueOnFailure=\"true\" />\n    </streamProcessor>\n\n  </extension>\n\n</component>\n",
          "xmlFileName": "/OSGI-INF/bulk-config.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-core-binarymanager-s3-2023.19.6.jar",
      "groupId": "org.nuxeo.ecm.core",
      "hierarchyPath": "/grp:org.nuxeo.ecm.core/grp:org.nuxeo.ecm.core.storage/grp:org.nuxeo.ecm.core.storage.binarymanager/org.nuxeo.ecm.core.storage.binarymanager.s3",
      "id": "org.nuxeo.ecm.core.storage.binarymanager.s3",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.9.6\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.12\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 2023.19.6-t20240918-070329\r\nBundle-SymbolicName: org.nuxeo.ecm.core.storage.binarymanager.s3;singlet\r\n on:=true\r\nNuxeo-Component: OSGI-INF/s3binarymanager-managment-contrib.xml,OSGI-INF\r\n /s3web-request-controller-contrib.xml,OSGI-INF/configuration-properties\r\n .xml,OSGI-INF/bulk-config.xml\r\n\r\n",
      "maxResolutionOrder": 830,
      "minResolutionOrder": 127,
      "packages": [
        "amazon-s3-online-storage"
      ],
      "readme": {
        "blobProviderId": "default",
        "content": "# nuxeo-core-binarymanager-s3\n\nThis addon implements a BinaryManager that stores binaries in a S3 bucket.\nFor efficiency, a local disk cache (with limited size) is also used.\n\nBe sure to protect your nuxeo.conf (readable only by the nuxeo user) as the\nfile will have your AWS identifiers (unless you are using instance roles).\n\n## Mandatory Parameters\n\n- nuxeo.core.binarymanager=org.nuxeo.ecm.blob.s3.S3BlobProvider\n\n- nuxeo.s3storage.bucket : the name of the S3 bucket (unique across all of\n  Amazon, find something original!)\n\n- nuxeo.s3storage.awsid : your AWS_ACCESS_KEY_ID\n\n- nuxeo.s3storage.awssecret : your AWS_SECRET_ACCESS_KEY\n\nIf the awsid and/or awssecret are not set, the addon will try to use\ntemporary credentials from the instance role (if any).\n\n## Optional Parameters\n\n- nuxeo.s3storage.region : the region code your S3 bucket will be placed in.\n  For us-east-1 (the default), don't set this parameter\n  For us-west-1 (Northern California), use us-west-1\n  For us-west-2 (Oregon), use us-west-2\n  For eu-west-1 (Ireland), use EU\n  For ap-southeast-1 (Singapore), use ap-southeast-1\n  For ap-northeast-1 (Tokyo), use ap-northeast-1\n  For sa-east-1 (Sao Paulo), use sa-east-1\n\n- nuxeo.s3storage.cachesize : size of the local cache (default is 100MB).\n- nuxeo.s3storage.bucket_prefix : bucket prefix\n- nuxeo.s3storage.pathstyleaccess : if `true`, configures the client to use path-style access for all requests (default is `false`)\n\n## Crypto Parameters\n\nWith S3, you have the option to store your data encrypted.\nNote that the local cache will *NOT* be encrypted.\n\nThe S3 binary manager can use a keystore containing a keypair, but there are\na few caveats to be aware of :\n\n- The Sun/Oracle JDK doesn't always allow the AES256 cipher which the AWS SDK\n  uses internally.\n  Depending on the US export restrictions for your country, you may be able to\n  modify your JDK to use AES256 by installing the \"Java Cryptography Extension\n  Unlimited Strength Jurisdiction Policy Files\". See this [link](http://www.oracle.com/technetwork/java/javase/downloads/index.html) to\n  download the files and installation instructions.\n\n- Don't forget to specify the key algorithm if you create your keypair with the\n  \"keytool\" command, as this won't work with the default (DSA).\n  The S3 Binary Manager has been tested with a keystore generated with this\n  command :\n\n  ```shell\n  keytool -genkeypair -keystore </path/to/keystore/file> -alias <key alias>\n      -storepass <keystore password> -keypass <key password>\n      -dname <key distinguished name> -keyalg RSA\n  ```\n\nWith all that preceded in mind, here are the crypto options (they are all\nmandatory once you specify a keystore) :\n\n- nuxeo.s3storage.crypt.keystore.file : the absolute path to the keystore file\n- nuxeo.s3storage.crypt.keystore.password : the keystore password\n- nuxeo.s3storage.crypt.key.alias = the key alias\n- nuxeo.s3storage.crypt.key.password = the key password\n\n## Server-side Encryption\n\nS3 allows you to use server-side encryption to encrypt data at rest with keys managed\nby S3 itself. To activate-this mode, use:\n\n- nuxeo.s3storage.crypt.serverside = true\n\nSee the related AWS [documentation](http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingServerSideEncryption.html) for more.\n\nIf you want to use Server-Side Encryption with AWS KMS–Managed Keys, specify your key id with:\n\n- nuxeo.s3storage.crypt.kms.key = your-key-id\n\nSee the related AWS [documentation](https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingKMSEncryption.html) for more.\n\n## Enable CloudFront Direct Download\n\nPlease, read carefully the [CloudFront documentation](https://aws.amazon.com/fr/documentation/cloudfront/) to understand how you bind a CloudFront distribution to a S3 bucket.\nAfter you created a CloudFront distribution domain bound to your S3 repository. Accessing your objects is not restricted per default.\n\nYou have to enable the `restriction viewer access` (Look at [Serving Private Content throught CloudFront](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html)), then each distribution URL must be signed to access the target object.\n\nYou have to set the `Query String Forwarding and Caching` on `all parameters` (Look at [Configuring CloudFront to Cache Based on Query String Parameters](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/QueryStringParameters.html)) in order to correctly forward `Content Disposition` parameters to get a response with a correct filename.\n\n### CloudFront Mandatory Parameters\n\nS3 parameters (except `nuxeo.core.binarymanager`) are mandatory, additionally CloudFront requires some new ones:\n\n- `nuxeo.core.binarymanager=org.nuxeo.ecm.core.storage.sql.CloudFrontBinaryManager`\n- `nuxeo.s3storage.cloudfront.privKey`: the absolute path of the private key file (`.pem` or `.der`). Read: [Creating CloudFront Key Pairs for Your Trusted Signers](http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-trusted-signers.html#private-content-creating-cloudfront-key-pairs)\n- `nuxeo.s3storage.cloudfront.privKeyId`: the private key id.\n- `nuxeo.s3storage.cloudfront.distribDomain`: the distribution domain name.\n- `nuxeo.s3storage.cloudfront.protocol`: the prefered protocol (default `HTTPS`)\n- `nuxeo.s3storage.cloudfront.fix.encoding`: Enable a workaround to fix an error on CloudFront side (default `false`)\n\n## Building\n\n```shell\nmvn clean install\n```\n\n## Testing\n\nRunning the unit tests requires some environment variables and System properties to be set, otherwise they are skipped.\n\n### Environment Variables\n\n```shell\n  AWS_REGION=eu-west-3\n  AWS_ACCESS_KEY_ID=******\n  AWS_SECRET_ACCESS_KEY=******\n  AWS_ROLE_ARN=arn:aws:iam::783725821734:role/nuxeo-s3directupload-role\n```\n\n### System Properties\n\n```shell\nmvn test \\\n  -nsu \\\n  -Dnuxeo.test.s3storage.bucket=nuxeo-platform-unit-tests \\\n  -Dnuxeo.test.s3storage.transient.bucket=nuxeo-platform-unit-tests-transient \\\n  -Dnuxeo.test.s3storage.policy.bucket=nuxeo-platform-unit-tests-policy \\\n  -Dnuxeo.test.s3storage.bucket_prefix=BUCKET_PREFIX \\\n  -Dnuxeo.test.s3storage.provider.test.bucket_prefix=TEST_BLOB_PROVIDER_PREFIX \\\n  -Dnuxeo.test.s3storage.provider.other.bucket_prefix=OTHER_BLOB_PROVIDER_PREFIX\n```\n\n## Deploying\n\nInstall [the Amazon S3 Online Storage Marketplace Package](https://connect.nuxeo.com/nuxeo/site/marketplace/package/amazon-s3-online-storage).\nOr manually copy the built artifacts into `$NUXEO_HOME/templates/custom/bundles/` and activate the \"custom\" template.\n\n## About Nuxeo\n\nNuxeo dramatically improves how content-based applications are built, managed and deployed, making customers more agile, innovative and successful. Nuxeo provides a next generation, enterprise ready platform for building traditional and cutting-edge content oriented applications. Combining a powerful application development environment with SaaS-based tools and a modular architecture, the Nuxeo Platform and Products provide clear business value to some of the most recognizable brands including Verizon, Electronic Arts, Sharp, FICO, the U.S. Navy, and Boeing. Nuxeo is headquartered in New York and Paris. More information is available at www.nuxeo.com.\n",
        "digest": "a98ea203329ec0f417106e1aa95af412",
        "encoding": "UTF-8",
        "length": 7201,
        "mimeType": "text/plain",
        "name": "README.md"
      },
      "requirements": [],
      "version": "2023.19.6"
    },
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-runtime-aws",
      "artifactVersion": "2023.19.6",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.connect.standalone",
          "org.nuxeo.launcher.commons",
          "org.nuxeo.osgi",
          "org.nuxeo.runtime",
          "org.nuxeo.runtime.aws",
          "org.nuxeo.runtime.cluster",
          "org.nuxeo.runtime.datasource",
          "org.nuxeo.runtime.jtajca",
          "org.nuxeo.runtime.kv",
          "org.nuxeo.runtime.management",
          "org.nuxeo.runtime.metrics",
          "org.nuxeo.runtime.migration",
          "org.nuxeo.runtime.mongodb",
          "org.nuxeo.runtime.nuxeo-runtime-deploy",
          "org.nuxeo.runtime.pubsub",
          "org.nuxeo.runtime.reload",
          "org.nuxeo.runtime.stream"
        ],
        "hierarchyPath": "/grp:org.nuxeo.runtime",
        "id": "grp:org.nuxeo.runtime",
        "name": "org.nuxeo.runtime",
        "parentIds": [],
        "readmes": [],
        "version": "2023.19"
      },
      "bundleId": "org.nuxeo.runtime.aws",
      "components": [
        {
          "@type": "NXComponent",
          "componentClass": "org.nuxeo.runtime.aws.AWSConfigurationServiceImpl",
          "documentation": "Manages AWS configuration.\n",
          "documentationHtml": "<p>\nManages AWS configuration.</p>",
          "extensionPoints": [
            {
              "@type": "NXExtensionPoint",
              "componentId": "org.nuxeo.runtime.aws.AWSConfigurationService",
              "descriptors": [
                "org.nuxeo.runtime.aws.AWSConfigurationDescriptor"
              ],
              "documentation": "\n      Used to register AWS configurations. Example:\n      <code>\n    <configuration id=\"myconfig\">\n        <accessKeyId>MY_ACCESS_KEY</accessKeyId>\n        <secretKey>MY_SECRET_KEY</secretKey>\n        <region>MY_REGION</region>\n        <trustStorePath>MY_TRUSTSTORE_PATH</trustStorePath>\n        <trustStorePassword>MY_TRUSTSTORE_PASSWORD</trustStorePassword>\n        <trustStoreType>MY_TRUSTSTORE_TYPE</trustStoreType>\n        <keyStorePath>MY_KEYSTORE_PATH</keyStorePath>\n        <keyStorePassword>MY_KEYSTORE_PASSWORD</keyStorePassword>\n        <keyStoreType>MY_KEYSTORE_TYPE</keyStoreType>\n    </configuration>\n</code>\n\n      If the configuration id is not present, \"default\" is used.\n\n      To look up a configuration, use new NuxeoAWSCredentialsProvider(\"myconfig\")\n      and new NuxeoAWSRegionProvider(\"myconfig\"). Alternatively, you can use\n      the service AWSConfigurationService directly (but it just looks up provided configuration,\n      it doesn't fall back to the AWS SDK default behavior).\n    \n",
              "documentationHtml": "<p>\nUsed to register AWS configurations. Example:\n</p><p></p><pre><code>    &lt;configuration id&#61;&#34;myconfig&#34;&gt;\n        &lt;accessKeyId&gt;MY_ACCESS_KEY&lt;/accessKeyId&gt;\n        &lt;secretKey&gt;MY_SECRET_KEY&lt;/secretKey&gt;\n        &lt;region&gt;MY_REGION&lt;/region&gt;\n        &lt;trustStorePath&gt;MY_TRUSTSTORE_PATH&lt;/trustStorePath&gt;\n        &lt;trustStorePassword&gt;MY_TRUSTSTORE_PASSWORD&lt;/trustStorePassword&gt;\n        &lt;trustStoreType&gt;MY_TRUSTSTORE_TYPE&lt;/trustStoreType&gt;\n        &lt;keyStorePath&gt;MY_KEYSTORE_PATH&lt;/keyStorePath&gt;\n        &lt;keyStorePassword&gt;MY_KEYSTORE_PASSWORD&lt;/keyStorePassword&gt;\n        &lt;keyStoreType&gt;MY_KEYSTORE_TYPE&lt;/keyStoreType&gt;\n    &lt;/configuration&gt;\n</code></pre><p>\nIf the configuration id is not present, &#34;default&#34; is used.\n</p><p>\nTo look up a configuration, use new NuxeoAWSCredentialsProvider(&#34;myconfig&#34;)\nand new NuxeoAWSRegionProvider(&#34;myconfig&#34;). Alternatively, you can use\nthe service AWSConfigurationService directly (but it just looks up provided configuration,\nit doesn&#39;t fall back to the AWS SDK default behavior).\n</p><p></p>",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.AWSConfigurationService/ExtensionPoints/org.nuxeo.runtime.aws.AWSConfigurationService--configuration",
              "id": "org.nuxeo.runtime.aws.AWSConfigurationService--configuration",
              "label": "configuration (org.nuxeo.runtime.aws.AWSConfigurationService)",
              "name": "configuration",
              "version": "2023.19.6"
            }
          ],
          "extensions": [],
          "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.AWSConfigurationService",
          "name": "org.nuxeo.runtime.aws.AWSConfigurationService",
          "requirements": [],
          "resolutionOrder": 776,
          "services": [
            {
              "@type": "NXService",
              "componentId": "org.nuxeo.runtime.aws.AWSConfigurationService",
              "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws/org.nuxeo.runtime.aws.AWSConfigurationService/Services/org.nuxeo.runtime.aws.AWSConfigurationService",
              "id": "org.nuxeo.runtime.aws.AWSConfigurationService",
              "overriden": false,
              "version": "2023.19.6"
            }
          ],
          "startOrder": 922,
          "version": "2023.19.6",
          "xmlFileContent": "<?xml version='1.0' encoding='UTF-8'?>\n<component name=\"org.nuxeo.runtime.aws.AWSConfigurationService\">\n\n  <documentation>Manages AWS configuration.</documentation>\n\n  <implementation class=\"org.nuxeo.runtime.aws.AWSConfigurationServiceImpl\"/>\n\n  <extension-point name=\"configuration\">\n    <documentation>\n      Used to register AWS configurations. Example:\n      <code>\n        <configuration id=\"myconfig\">\n          <accessKeyId>MY_ACCESS_KEY</accessKeyId>\n          <secretKey>********</secretKey>\n          <region>MY_REGION</region>\n          <trustStorePath>MY_TRUSTSTORE_PATH</trustStorePath>\n          <trustStorePassword>********</trustStorePassword>\n          <trustStoreType>MY_TRUSTSTORE_TYPE</trustStoreType>\n          <keyStorePath>MY_KEYSTORE_PATH</keyStorePath>\n          <keyStorePassword>********</keyStorePassword>\n          <keyStoreType>MY_KEYSTORE_TYPE</keyStoreType>\n        </configuration>\n      </code>\n      If the configuration id is not present, \"default\" is used.\n\n      To look up a configuration, use new NuxeoAWSCredentialsProvider(\"myconfig\")\n      and new NuxeoAWSRegionProvider(\"myconfig\"). Alternatively, you can use\n      the service AWSConfigurationService directly (but it just looks up provided configuration,\n      it doesn't fall back to the AWS SDK default behavior).\n    </documentation>\n    <object class=\"org.nuxeo.runtime.aws.AWSConfigurationDescriptor\"/>\n  </extension-point>\n\n  <service>\n    <provide interface=\"org.nuxeo.runtime.aws.AWSConfigurationService\"/>\n  </service>\n\n</component>",
          "xmlFileName": "/OSGI-INF/aws-configuration-service.xml",
          "xmlPureComponent": false
        }
      ],
      "fileName": "nuxeo-runtime-aws-2023.19.6.jar",
      "groupId": "org.nuxeo.runtime",
      "hierarchyPath": "/grp:org.nuxeo.runtime/org.nuxeo.runtime.aws",
      "id": "org.nuxeo.runtime.aws",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven 3.9.6\r\nBuilt-By: root\r\nBuild-Jdk: 17.0.12\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-ActivationPolicy: lazy\r\nBundle-ClassPath: .\r\nBundle-Vendor: org.nuxeo\r\nBundle-Name: Nuxeo Runtime AWS\r\nBundle-SymbolicName: org.nuxeo.runtime.aws;singleton=true\r\nNuxeo-Component: OSGI-INF/aws-configuration-service.xml\r\n\r\n",
      "maxResolutionOrder": 776,
      "minResolutionOrder": 776,
      "packages": [
        "amazon-s3-online-storage"
      ],
      "requirements": [],
      "version": "2023.19.6"
    }
  ],
  "creationDate": 1727081800658,
  "key": "Nuxeo Platform-2023.19",
  "name": "Nuxeo Platform",
  "operations": [],
  "packages": [
    {
      "@type": "NXPackage",
      "bundles": [
        "org.nuxeo.ecm.core.storage.binarymanager.common",
        "org.nuxeo.ecm.core.storage.binarymanager.s3",
        "org.nuxeo.runtime.aws"
      ],
      "conflicts": [],
      "dependencies": [],
      "hierarchyPath": "/amazon-s3-online-storage-2023.19.6",
      "id": "amazon-s3-online-storage-2023.19.6",
      "name": "amazon-s3-online-storage",
      "optionalDependencies": [],
      "packageType": "addon",
      "title": "Amazon S3 Online Storage",
      "version": "2023.19.6"
    }
  ],
  "pluginSnapshots": {},
  "releaseDate": 1727081800658,
  "version": "2023.19"
}